前置代理的加密通信流程
前置代理(如 Trojan)的核心思路是将加密流量伪装成正常的 HTTPS 流量,使得网络审查无法区分代理流量和普通 HTTPS 流量。
完整的加密解密过程
用户设备 前置代理服务器 目标服务器
| | |
| 1. 原始请求(明文) | |
| 2. TLS 加密(用户密钥) | |
|----------------------------->| |
| | 3. TLS 解密 |
| | 4. 验证用户密码/哈希 |
| | 5. TLS 加密(目标证书) |
| |------------------------>|
| | |
| | 6. 目标响应 |
| |<------------------------|
| | 7. 解密目标响应 |
| | 8. TLS 加密(用户密钥) |
|<-----------------------------| |
| 9. 解密,获得原始响应 | |
text
两层 TLS 加密
前置代理的关键在于存在两层 TLS 加密:
第一层:用户到前置代理服务器之间的 TLS 连接。这个连接使用前置代理服务器的 SSL 证书(由 Let's Encrypt 等签发),看起来就是一个正常的 HTTPS 连接。流量特征与访问普通网站完全一致。
第二层:前置代理服务器到目标服务器之间的 TLS 连接。这是标准的 HTTPS 请求,使用目标服务器的证书。
为什么能绕过审查
网络审查通常基于以下手段:
- IP 黑名单:封锁已知的代理服务器 IP
- 深度包检测(DPI):分析流量特征,识别非标准协议
- 域名过滤:封锁特定域名的 DNS 解析
前置代理能绕过的原因:
- 流量外观与正常 HTTPS 完全一致(TLS 握手、证书验证流程标准)
- 载荷被 TLS 加密保护,DPI 无法读取内容
- 使用合法域名和正规 SSL 证书,不会被域名过滤拦截
- 前置代理服务器通常使用 CDN 或云服务 IP,不容易被 IP 黑名单命中
Trojan 协议的特点
Trojan 是一种基于 TLS 的代理协议,它不做额外的加密(因为 TLS 已经提供了加密),而是将代理请求伪装成标准的 HTTPS 流量:
- 使用真实的 TLS 握手和真实的 SSL 证书
- 代理密码通过 SHA-256 哈希传输
- 如果非代理用户访问,返回正常的 Web 页面(伪装站点)
- 流量特征与正常 HTTPS 几乎无法区分
与其他代理协议的对比
| 协议 | 加密方式 | 流量特征 | 速度 | 安全性 |
|---|---|---|---|---|
| Trojan | TLS | 与 HTTPS 一致 | 快 | 高 |
| Shadowsocks | 自定义加密 | 可被 DPI 识别 | 快 | 中 |
| VMess (V2Ray) | 自定义加密 + TLS | 可配置为 HTTPS | 中 | 高 |
| SOCKS5 | 无加密(明文) | 明文 | 快 | 低 |
| HTTP Proxy | 无加密 | 明文 | 快 | 低 |
SOCKS5 和 HTTP Proxy 不提供加密,仅适合内网环境或作为其他协议的底层传输。
↑